package engine;

//Precisa ser reescrito

import java.util.Scanner;

import org.junit.*;

public class HeapTest {
	
	private Heap heap1;
	private Heap heap2;
	private Heap heap3;
		
	@Before
	public void generateHeaps() {
		int[] emptyArray = new int[0];
		int[] unitaryArray = new int[1];
		int[] normalArray = new int[10];
		
		unitaryArray[0] = 1;
		for (int i=0; i<normalArray.length; i++) {
			normalArray[i] = 10-i;
		}
		
		heap1 = new Heap(emptyArray);
		heap2 = new Heap(unitaryArray);
		heap3 = new Heap(normalArray);
	}
	
	@Test
	public void arrayVazioTest() {
		Assert.assertTrue("numero errado de elementos - 1", heap1.getValues().length==0);
		Assert.assertFalse("o array não deveria ter elementos a serem trocados - 1", heap1.check());
		heap1.replace();
		Assert.assertTrue("numero errado de elementos - 2", heap1.getValues().length==0);
		Assert.assertFalse("o array não deveria ter elementos a serem trocados - 2", heap1.check());
	}
	
	@Test
	public void arrayUnitarioTest() {
		Assert.assertTrue("numero errado de elementos - 3", heap2.getValues().length==1);
		Assert.assertFalse("o array não deveria ter elementos a serem trocados - 3", heap2.check());
		heap2.replace();
		Assert.assertTrue("numero errado de elementos - 4", heap2.getValues().length==1);
		Assert.assertFalse("o array não deveria ter elementos a serem trocados - 4", heap2.check());
	}
	
	@Test
	public void arrayComMuitosElementosTest() {
		Scanner sc = new Scanner(System.in);
		Assert.assertTrue("numero errado de elementos - 5", heap3.getValues().length==10);
		Assert.assertTrue("o array deveria ter elementos a serem trocados - 1", heap3.check());
		Assert.assertTrue("numero errado de elementos - 6", heap3.getValues().length==10);
		while(heap3.check()) {
			//sc.next();
			System.out.println(heap3);
			heap3.replace();
			
		}
		Assert.assertFalse("o array não deveria ter elementos a serem trocados - 5", heap3.check());
		System.out.println("acabou\n"+heap3.toString());
		int[] valoresOrdenados = {1, 2, 3, 5, 4, 8, 9, 6, 10, 7};
		//Assert.assertEquals("elementos em posições erradas - 1", new Heap(valoresOrdenados).toString(), heap3.toString());
		System.out.println(heap3.getGraphvizText());
		heap3.saveFile();
	}
}
